{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Otto商品分类——PCA\n",
    "训练集\n",
    "\n",
    "Otto数据集是著名电商Otto提供的一个多类商品分类问题，类别数=9. 每个样本有93维数值型特征（整数，可能表示某种事件发生的次数，已经进行过脱敏处理）。 \n",
    "竞赛官网：https://www.kaggle.com/c/otto-group-product-classification-challenge/data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 216, got 192\n",
      "  return f(*args, **kwds)\n",
      "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 216, got 192\n",
      "  return f(*args, **kwds)\n",
      "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 216, got 192\n",
      "  return f(*args, **kwds)\n"
     ]
    }
   ],
   "source": [
    "#导入必要的工具包\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "from sklearn.decomposition import PCA"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>feat_1</th>\n",
       "      <th>feat_2</th>\n",
       "      <th>feat_3</th>\n",
       "      <th>feat_4</th>\n",
       "      <th>feat_5</th>\n",
       "      <th>feat_6</th>\n",
       "      <th>feat_7</th>\n",
       "      <th>feat_8</th>\n",
       "      <th>feat_9</th>\n",
       "      <th>...</th>\n",
       "      <th>feat_85</th>\n",
       "      <th>feat_86</th>\n",
       "      <th>feat_87</th>\n",
       "      <th>feat_88</th>\n",
       "      <th>feat_89</th>\n",
       "      <th>feat_90</th>\n",
       "      <th>feat_91</th>\n",
       "      <th>feat_92</th>\n",
       "      <th>feat_93</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>Class_1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>Class_1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>Class_1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>Class_1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>Class_1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 95 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   id  feat_1  feat_2  feat_3  feat_4  feat_5  feat_6  feat_7  feat_8  feat_9  \\\n",
       "0   1       1       0       0       0       0       0       0       0       0   \n",
       "1   2       0       0       0       0       0       0       0       1       0   \n",
       "2   3       0       0       0       0       0       0       0       1       0   \n",
       "3   4       1       0       0       1       6       1       5       0       0   \n",
       "4   5       0       0       0       0       0       0       0       0       0   \n",
       "\n",
       "   ...  feat_85  feat_86  feat_87  feat_88  feat_89  feat_90  feat_91  \\\n",
       "0  ...        1        0        0        0        0        0        0   \n",
       "1  ...        0        0        0        0        0        0        0   \n",
       "2  ...        0        0        0        0        0        0        0   \n",
       "3  ...        0        1        2        0        0        0        0   \n",
       "4  ...        1        0        0        0        0        1        0   \n",
       "\n",
       "   feat_92  feat_93   target  \n",
       "0        0        0  Class_1  \n",
       "1        0        0  Class_1  \n",
       "2        0        0  Class_1  \n",
       "3        0        0  Class_1  \n",
       "4        0        0  Class_1  \n",
       "\n",
       "[5 rows x 95 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#读取训练数据\n",
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"Otto_train.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 准备数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = train['target']   \n",
    "X_train = train.drop([\"id\", \"target\"], axis=1)\n",
    "\n",
    "# 原始特征\n",
    "train_id = train['id']\n",
    "columns_org = X_train.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## PCA降维"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "pca = PCA(n_components = 93)\n",
    "pca.fit(X_train)\n",
    "    \n",
    "# 在训练集和测试集降维 \n",
    "X_train_pca = pca.transform(X_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 绘制PCA维的方差"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'numpy.ndarray'>\n",
      "93\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "print(type(pca.explained_variance_ratio_))\n",
    "print(pca.explained_variance_ratio_.size)\n",
    "# pca 类两个值得关注的成员：\n",
    "# 1.explained_variance_，它代表降维后的各主成分的方差值。方差值越大，则说明越是重要的主成分。\n",
    "# 2.explained_variance_ratio_，它代表降维后的各主成分的方差值占总方差值的比例，这个比例越大，则越是重要的主成分。\n",
    "plt.bar(range(len(pca.explained_variance_ratio_)), pca.explained_variance_ratio_)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'numpy.ndarray'>\n",
      "93\n",
      "range(0, 93)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(type(pca.explained_variance_))\n",
    "print(pca.explained_variance_.size)\n",
    "print(range(len(pca.explained_variance_)))\n",
    "# pca 类两个值得关注的成员：\n",
    "# 1.explained_variance_，它代表降维后的各主成分的方差值。方差值越大，则说明越是重要的主成分。\n",
    "# 2.explained_variance_ratio_，它代表降维后的各主成分的方差值占总方差值的比例，这个比例越大，则越是重要的主成分。\n",
    "plt.bar(range(len(pca.explained_variance_)), pca.explained_variance_)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feat_1</th>\n",
       "      <th>feat_2</th>\n",
       "      <th>feat_3</th>\n",
       "      <th>feat_4</th>\n",
       "      <th>feat_5</th>\n",
       "      <th>feat_6</th>\n",
       "      <th>feat_7</th>\n",
       "      <th>feat_8</th>\n",
       "      <th>feat_9</th>\n",
       "      <th>feat_10</th>\n",
       "      <th>...</th>\n",
       "      <th>feat_84</th>\n",
       "      <th>feat_85</th>\n",
       "      <th>feat_86</th>\n",
       "      <th>feat_87</th>\n",
       "      <th>feat_88</th>\n",
       "      <th>feat_89</th>\n",
       "      <th>feat_90</th>\n",
       "      <th>feat_91</th>\n",
       "      <th>feat_92</th>\n",
       "      <th>feat_93</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>22</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 93 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   feat_1  feat_2  feat_3  feat_4  feat_5  feat_6  feat_7  feat_8  feat_9  \\\n",
       "0       1       0       0       0       0       0       0       0       0   \n",
       "1       0       0       0       0       0       0       0       1       0   \n",
       "2       0       0       0       0       0       0       0       1       0   \n",
       "3       1       0       0       1       6       1       5       0       0   \n",
       "4       0       0       0       0       0       0       0       0       0   \n",
       "\n",
       "   feat_10  ...  feat_84  feat_85  feat_86  feat_87  feat_88  feat_89  \\\n",
       "0        0  ...        0        1        0        0        0        0   \n",
       "1        0  ...        0        0        0        0        0        0   \n",
       "2        0  ...        0        0        0        0        0        0   \n",
       "3        1  ...       22        0        1        2        0        0   \n",
       "4        0  ...        0        1        0        0        0        0   \n",
       "\n",
       "   feat_90  feat_91  feat_92  feat_93  \n",
       "0        0        0        0        0  \n",
       "1        0        0        0        0  \n",
       "2        0        0        0        0  \n",
       "3        0        0        0        0  \n",
       "4        1        0        0        0  \n",
       "\n",
       "[5 rows x 93 columns]"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#第二题 对Otto商品tfidf特征，进行PCA降维，给出各维方差的分布图。\n",
    "from sklearn.feature_extraction.text import TfidfTransformer\n",
    "tfidf = TfidfTransformer()\n",
    "\n",
    "print(type(X_train))\n",
    "X_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feat_1_tfidf</th>\n",
       "      <th>feat_2_tfidf</th>\n",
       "      <th>feat_3_tfidf</th>\n",
       "      <th>feat_4_tfidf</th>\n",
       "      <th>feat_5_tfidf</th>\n",
       "      <th>feat_6_tfidf</th>\n",
       "      <th>feat_7_tfidf</th>\n",
       "      <th>feat_8_tfidf</th>\n",
       "      <th>feat_9_tfidf</th>\n",
       "      <th>feat_10_tfidf</th>\n",
       "      <th>...</th>\n",
       "      <th>feat_84_tfidf</th>\n",
       "      <th>feat_85_tfidf</th>\n",
       "      <th>feat_86_tfidf</th>\n",
       "      <th>feat_87_tfidf</th>\n",
       "      <th>feat_88_tfidf</th>\n",
       "      <th>feat_89_tfidf</th>\n",
       "      <th>feat_90_tfidf</th>\n",
       "      <th>feat_91_tfidf</th>\n",
       "      <th>feat_92_tfidf</th>\n",
       "      <th>feat_93_tfidf</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.080436</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.074055</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.227278</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.196169</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.011846</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.010756</td>\n",
       "      <td>0.103045</td>\n",
       "      <td>0.021145</td>\n",
       "      <td>0.073024</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.013132</td>\n",
       "      <td>...</td>\n",
       "      <td>0.446712</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.008051</td>\n",
       "      <td>0.022456</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.121616</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.142568</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 93 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   feat_1_tfidf  feat_2_tfidf  feat_3_tfidf  feat_4_tfidf  feat_5_tfidf  \\\n",
       "0      0.080436           0.0           0.0      0.000000      0.000000   \n",
       "1      0.000000           0.0           0.0      0.000000      0.000000   \n",
       "2      0.000000           0.0           0.0      0.000000      0.000000   \n",
       "3      0.011846           0.0           0.0      0.010756      0.103045   \n",
       "4      0.000000           0.0           0.0      0.000000      0.000000   \n",
       "\n",
       "   feat_6_tfidf  feat_7_tfidf  feat_8_tfidf  feat_9_tfidf  feat_10_tfidf  ...  \\\n",
       "0      0.000000      0.000000      0.000000           0.0       0.000000  ...   \n",
       "1      0.000000      0.000000      0.227278           0.0       0.000000  ...   \n",
       "2      0.000000      0.000000      0.196169           0.0       0.000000  ...   \n",
       "3      0.021145      0.073024      0.000000           0.0       0.013132  ...   \n",
       "4      0.000000      0.000000      0.000000           0.0       0.000000  ...   \n",
       "\n",
       "   feat_84_tfidf  feat_85_tfidf  feat_86_tfidf  feat_87_tfidf  feat_88_tfidf  \\\n",
       "0       0.000000       0.074055       0.000000       0.000000            0.0   \n",
       "1       0.000000       0.000000       0.000000       0.000000            0.0   \n",
       "2       0.000000       0.000000       0.000000       0.000000            0.0   \n",
       "3       0.446712       0.000000       0.008051       0.022456            0.0   \n",
       "4       0.000000       0.121616       0.000000       0.000000            0.0   \n",
       "\n",
       "   feat_89_tfidf  feat_90_tfidf  feat_91_tfidf  feat_92_tfidf  feat_93_tfidf  \n",
       "0            0.0       0.000000            0.0            0.0            0.0  \n",
       "1            0.0       0.000000            0.0            0.0            0.0  \n",
       "2            0.0       0.000000            0.0            0.0            0.0  \n",
       "3            0.0       0.000000            0.0            0.0            0.0  \n",
       "4            0.0       0.142568            0.0            0.0            0.0  \n",
       "\n",
       "[5 rows x 93 columns]"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "# 输出稀疏矩阵\n",
    "X_train_tfidf = tfidf.fit_transform(X_train).toarray()\n",
    "\n",
    "# 重新组成DataFrame，方便可视化\n",
    "feat_names = columns_org+\"_tfidf\"\n",
    "X_train_tfidf = pd.DataFrame(columns = feat_names, data = X_train_tfidf)\n",
    "feat_names_tfidf = X_train_tfidf.columns\n",
    "X_train_tfidf.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 保存tfidf特征变换结果\n",
    "y = pd.Series(data = y_train, name = 'target')\n",
    "train_tfidf = pd.concat([train_id,pd.DataFrame(columns = feat_names_tfidf, data = X_train_tfidf),y], axis = 1)\n",
    "train_tfidf.to_csv(dpath+'Otto_FE_train_tfidf.csv',index=False,header=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "pca = PCA(n_components = 93)\n",
    "pca.fit(X_train_tfidf)\n",
    "    \n",
    "# 在训练集和测试集降维 \n",
    "X_train_pca = pca.transform(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'numpy.ndarray'>\n",
      "93\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(type(pca.explained_variance_ratio_))\n",
    "print(pca.explained_variance_ratio_.size)\n",
    "# pca 类两个值得关注的成员：\n",
    "# 1.explained_variance_，它代表降维后的各主成分的方差值。方差值越大，则说明越是重要的主成分。\n",
    "# 2.explained_variance_ratio_，它代表降维后的各主成分的方差值占总方差值的比例，这个比例越大，则越是重要的主成分。\n",
    "plt.bar(range(len(pca.explained_variance_ratio_)), pca.explained_variance_ratio_)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# pca 类两个值得关注的成员：\n",
    "# 1.explained_variance_，它代表降维后的各主成分的方差值。方差值越大，则说明越是重要的主成分。\n",
    "# 2.explained_variance_ratio_，它代表降维后的各主成分的方差值占总方差值的比例，这个比例越大，则越是重要的主成分。\n",
    "plt.bar(range(len(pca.explained_variance_)), pca.explained_variance_)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 保存结果，PCA降维后的表示可作为特征提取的一部分"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "#保存PCA特征变换结果\n",
    "n_components = pca.n_components_\n",
    "feat_names_pca = []\n",
    "for i in range(n_components):\n",
    "    feat_names_pca.append(\"pca_\" + str(i))\n",
    "\n",
    "y = pd.Series(data = y_train, name = 'target')\n",
    "train_pca = pd.concat([train_id, pd.DataFrame(columns = feat_names_pca, data = X_train_pca), y], axis = 1)\n",
    "train_pca.to_csv(dpath +'Otto_FE_train_PCA.csv',index=False,header=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 保存特征编码过程中用到的模型，用于后续对测试数据的特征编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pickle\n",
    "\n",
    "pickle.dump(pca, open(\"pca.pkl\", 'wb'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## 在PCA前两维上显示降维后的数据分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def plot_embedding_PCA(data, targets, colors, title):\n",
    "    #x_min, x_max = np.min(data, 0), np.max(data, 0)\n",
    "    #data = (data - x_min) / (x_max - x_min)\n",
    "\n",
    "    fig = plt.figure(figsize = (8,8))\n",
    "    ax = fig.add_subplot(1,1,1) \n",
    "    \n",
    "    for target, color in zip(targets,colors):\n",
    "        indicesToKeep = data['target'] == target\n",
    "        ax.scatter(data.loc[indicesToKeep, 'pca_0']\n",
    "               , data.loc[indicesToKeep, 'pca_1']\n",
    "               , c = color\n",
    "               , s = 50)\n",
    "    \n",
    "    ax.legend(targets)\n",
    "    ax.grid()\n",
    "    \n",
    "    ax.set_xlabel('Principal Component 1', fontsize = 15)\n",
    "    ax.set_ylabel('Principal Component 2', fontsize = 15)\n",
    "    ax.set_title(title, fontsize = 20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nf+w9+jKcKw5nzsz7+6w1a+bds+edZ88+Z55593vZwBkR8XAr659I2jXA4MGD95o6deoGasmG8c47\n7zBw4MB6h7HBuZ3NowxtBLez2TRzO8eOHftwRIzqqF63zuoXEYe0Vi5pN2AE8JgkgGHAXEmjSVv6\n2xSqDwMWtbH+K4ArAEaNGhVjxoypWezdoaWlhUaLeX24nc2jDG0Et7PZlKWd7ekRw/4R8UREbBUR\nwyNiOCnhj4yIJcB04IR81P8+wPKIWFzPeM3MzBpZt275r6dfAUcA84D3gJPqG46ZmVlj65HJP2/9\nVx4H8M36RWNmZtZcemTyNzOzrlm94l3m33MLL89tAWDongcxYsxR9Ok/oL6BWY/k5G9m1uCWPfMw\nM8/9Gh+sWvlR2ZLH7ufR/76QsWdfxaCd9qpjdNYT9YgD/szMbP2sXvEuLT+cuFbir/hg1UpmnjeR\n1SvfrUNk1pM5+ZuZNbAFD/6KD9esbvP5Dz9YzYIH7+jGiKwROPmbmTWwt5e82G7yjzWreXvJgjaf\nt3Jy8jcza2Cbbr0dG/Xu0+bz6t2HTbfethsjskbg5G9m1sC23e+IdpP/Rr36sO1+h3djRNYInPzN\nzBpYn/4DGDP5Cnr17bfOc7369mPsWVfQp59P97O1+VQ/M7MGN2invTjqyvuZf88tLJp7DwCfGXkQ\nIw460onfWuXkb2bWBPr0G8COh05gx0Mn1DsUawAe9jczMysZJ38zM7OScfI3MzMrGSd/MzOzknHy\nNzMzKxknfzMzs5Jx8jczMysZJ38zM7OScfI3MzMrGSd/MzOzknHyNzMzKxknfzMzs5Jx8jczMysZ\nJ38zM7OScfI3MzMrGSd/MzOzknHyNzMzKxlFRL1j2CAkLQNerHccXbQl8Gq9g+gGbmfzKEMbwe1s\nNs3czu0iYlBHlZo2+TciSXMiYlS949jQ3M7mUYY2gtvZbMrSzvZ42N/MzKxknPzNzMxKxsm/Z7mi\n3gF0E7ezeZShjeB2NpuytLNN3udvZmZWMt7yNzMzKxkn/x5A0mGSnpU0T9KZ9Y6nViRtI2mmpKcl\n/V7SpFy+uaS7JP1fvv90vWOtBUm9JD0i6ba8PELS7NzOGyX1rXeMn5SkzSRNk/RM7td9m7E/JX07\n/80+KekGSf2aoT8lXS1pqaQnC2Wt9p+Sf8/fS49LGlm/yLumjXaen/9uH5f0C0mbFZ6bnNv5rKRD\n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\ncOAAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10e0e2e50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "targets = []\n",
    "colors = []\n",
    "for i in range(9):\n",
    "    colors.append(plt.cm.Set1(i/ 10.))\n",
    "    targets.append(\"Class_\" + str(i+1))\n",
    "    \n",
    "plot_embedding_PCA(train_pca, targets, colors,\"PCA embedding of Otto Dataset\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "PCA的前两维不能分开不同类别的商品"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
